﻿using System;
using System.Collections.Generic;
using System.Reflection;
using System.Windows;

using SBPweb.RIA.Shared.Contracts.Base;
using SBPweb.RIA.Shared.Contracts.Models;
using SBPweb.RIA.Shared.Contracts.Events;

namespace SBPweb.RIA.Shared.Contracts.Controllers
{

    public interface IPackageLoaderController : IController<IPackageLoaderModel>
    {

        #region Methods

        void LoadPackage(string packageName);

        void LoadPackage(string packageName, AsyncRequestHandler<IList<Assembly>> completed);

        void LoadPackage(string packageName, AsyncRequestArgs<IList<Assembly>> args);

        void LoadPackage(Uri baseUri, string packageName);

        void LoadPackage(Uri baseUri, string packageName, AsyncRequestHandler<IList<Assembly>> completed);

        void LoadPackage(Uri baseUri, string packageName, AsyncRequestArgs<IList<Assembly>> args);

        void LoadFormFromPackage(string packageName, string formPath);

        void LoadFormFromPackage(string packageName, string formPath, AsyncRequestHandler<UIElement> completed);

        void LoadFormFromPackage(string packageName, string formPath, AsyncRequestArgs<UIElement> args);

        void LoadFormFromPackage(Uri baseUri, string packageName, string formPath);

        void LoadFormFromPackage(Uri baseUri, string packageName, string formPath, AsyncRequestHandler<UIElement> completed);

        void LoadFormFromPackage(Uri baseUri, string packageName, string formPath, AsyncRequestArgs<UIElement> args);

        void LoadFromPackage<T>(string packageName, string componentPath, AsyncRequestHandler<T> completed);

        void LoadFromPackage<T>(Uri baseUri, string packageName, string componentPath, AsyncRequestHandler<T> completed);

        void LoadFromPackage<T>(Uri baseUri, string packageName, string componentPath, AsyncRequestArgs<T> args);

        #endregion

    }

}